/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Servlets;

import Clases.*;
import Persistencia.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author JAVA
 */
public class SGuardaEdicion extends HttpServlet {

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, SQLException, ParseException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        
        String clase = request.getParameter("id");
        
        if(clase.equals("Cliente")){
            
            // RECOJIDA DE DATOS DEL CLIENTE
             String codigo = request.getParameter("codigo");
             String nombre = request.getParameter("nombre");
             String direccion = request.getParameter("direccion");
             String provincia = request.getParameter("provincia");
             String localidad = request.getParameter("localidad");
             String codigoPostal = request.getParameter("cp");
             String movil = request.getParameter("movil");
             String email = request.getParameter("email");
             String nif = request.getParameter("nif");
             String telefono1 = request.getParameter("telf1");
             String telefono2 = request.getParameter("telf2");
             String fax = request.getParameter("fax");
             String personaContacto = request.getParameter("contacto");
             String observacion = request.getParameter("observacion");
             int estado = Integer.parseInt(request.getParameter("estado"));

             int addcliente = 0;
             if(nombre.equals("") || direccion.equals("") || provincia.equals("") || localidad.equals("") 
                     || codigoPostal.equals("") || movil.equals("") || nif.equals("")){
                addcliente = 2;
             }else{

                 // MODIFICACION DE CLIENTE EN BD
                Cliente cliente = new Cliente(codigo, nombre, nif, email, personaContacto, movil, telefono1, telefono2, fax, direccion, provincia, localidad, codigoPostal, observacion, estado);
                 addcliente = PersistenciaCliente.modificarCliente(cliente);
             }


             // REDIRECCION 
             request.setAttribute("insertado",addcliente);
             RequestDispatcher rd = request.getRequestDispatcher("SEditar?id=Cliente&codigo="+codigo);
             rd.forward(request, response);
             
        }else if(clase.equals("FacCliente")){
                        
            // RECOJIDA DE DATOS DE LA FACTURACION DEL CLIENTE
             String codigo = request.getParameter("codigo");
             String nombre = request.getParameter("nombre");
             String direccion = request.getParameter("direccion");
             String provincia = request.getParameter("provincia");
             String localidad = request.getParameter("localidad");
             String codigoPostal = request.getParameter("cp");
             String movil = request.getParameter("movil");
             String email = request.getParameter("email");
             String nif = request.getParameter("nif");
             String telefono1 = request.getParameter("telf1");
             String telefono2 = request.getParameter("telf2");
             String fax = request.getParameter("fax");
             String personaContacto = request.getParameter("contacto");
             String observacion = request.getParameter("observacion");
             int estado = Integer.parseInt(request.getParameter("estado"));
             
             String nifBD = request.getParameter("nifBD");

             int addfaccliente = 0;
             if(nombre.equals("") || direccion.equals("") || provincia.equals("") || localidad.equals("") 
                     || codigoPostal.equals("") || movil.equals("") || nif.equals("")){
                addfaccliente = 2;
             }else{

                 // MODIFICACION DEL DATO DE FACTURACION EN BD
                FacturacionCliente FacCliente = new FacturacionCliente(PersistenciaCliente.obtenerCliente(codigo), codigo, nombre, nif, email, personaContacto, movil, telefono1, telefono2, fax, direccion, provincia, localidad, codigoPostal, observacion, estado);
                 addfaccliente = PersistenciaFacturacionCliente.modificarFacturacionCliente(FacCliente,nifBD);
             }


             // REDIRECCION 
             request.setAttribute("insertado",addfaccliente);
             RequestDispatcher rd = request.getRequestDispatcher("SEditar?id=FacClientes&codigo="+codigo+"&nifV="+nif);
             rd.forward(request, response);

        }else if(clase.equals("Factura")){
            DateFormat df = new SimpleDateFormat("dd/MM/yyyy");            
            Date fecha;
            int addFactura;
            int i;
            int j;
            int numLineas = Integer.parseInt(request.getParameter("lineas"));
            String codFactura = request.getParameter("codigofactura");
            String fechaS = request.getParameter("fecha");
            String cliente = request.getParameter("cliente");
            String cif = request.getParameter("nif");
            String tipoiva = request.getParameter("tipoiva");
            String retencion = request.getParameter("retencion");
            float retencionF = Float.parseFloat(retencion);
            String servicio;
            String cantidad;
            String precio;
            LineaServicioFactura lsf;
            ArrayList<LineaServicioFactura> listalineas = new ArrayList();
            Factura factura2 = null;
            Factura f = PersistenciaFactura.obtenerFactura(codFactura);
            ArrayList<LineaServicioFactura> lineasActuales = f.getLineas();
            LineaServicioFactura lInsertada;
            
           
            if(numLineas>lineasActuales.size())
            {
                numLineas--;
                Servicio sInsertado = PersistenciaServicio.obtenerServicio(request.getParameter("servicio"+numLineas+""));                 
                float cInsertado = Float.parseFloat(request.getParameter("cantidad"+numLineas+""));
                float pInsertado= Float.parseFloat(request.getParameter("precio"+numLineas+""));
                lInsertada = new LineaServicioFactura(sInsertado,cInsertado,pInsertado);                
                
                int insertada = PersistenciaLineaFactura.insertarLineaServicioFactura(lInsertada, f);
            }
            
            
            ArrayList<LineaServicioFactura> lineas = PersistenciaLineaFactura.obtenerLineas(codFactura);
            for(j=0;j<lineas.size();j++)
            {
                servicio = request.getParameter("servicio"+j+"");
                cantidad = request.getParameter("cantidad"+j+"");
                precio = request.getParameter("precio"+j+"");  
                if(servicio.equals("Seleccione un Servicio") || cantidad.equals("") || precio.equals(""))
                {
                    addFactura=2;
                }
            }
            
            if(fechaS.equals("") || cliente.equals("Seleccione Cliente") || cif.equals("Seleccione CIF") || tipoiva.equals("Seleccione Tipo IVA") ){
                addFactura = 2;
             }else{
            
            
                    for(i=0;i<lineas.size();i++)
                    {
                        Servicio servicioi = PersistenciaServicio.obtenerServicio(request.getParameter("servicio"+i+""));
                        float cantidadi = Float.parseFloat(request.getParameter("cantidad"+i+""));
                        float precioi = Float.parseFloat(request.getParameter("precio"+i+""));
                        lsf = new LineaServicioFactura(servicioi,cantidadi,precioi);
                        listalineas.add(lsf);
                    }
                    fecha = df.parse(fechaS);
                    Factura factura = PersistenciaFactura.obtenerFactura(codFactura);
                    FacturacionCliente fc = PersistenciaFacturacionCliente.obtenerFacturacionCliente(cliente, cif);
                    TiposIva iva = PersistenciaTiposIva.obtenterTipoIva(tipoiva);
                    
                    factura2 = new Factura(fc, factura.getSerieFacturacion(), codFactura, fecha, iva, retencionF, listalineas, factura.isEnviado());
                    addFactura = PersistenciaFactura.modificarFactura(factura2);
                    
            }
                         request.setAttribute("insertado",addFactura);
                         request.setAttribute("factura", factura2);
                         RequestDispatcher rd = request.getRequestDispatcher("editaFactura.jsp");
                         rd.forward(request, response);
            
            
                   
             
        }else if(clase.equals("Servicio")){
            
            int error = 0;
            
            String servicio = request.getParameter("servicio");
            String servicioBD = request.getParameter("servicioBD");
            String descripcion = request.getParameter("descripcion");
            
            if(servicio.equals("")){
                error = 2;
            }else{
                Servicio serv = new Servicio(servicio, descripcion);
                error = PersistenciaServicio.actualizaServicio(serv, servicioBD);
            }
            
            request.setAttribute("insertado", error);
            
            RequestDispatcher rd = request.getRequestDispatcher("SEditar?id=Servicio&nombre="+servicio);
            rd.forward(request, response);
            
        } else if(clase.equals("SFacturacion")){
            
               // RECOJIDA DE DATOS DE LA SERIE DE FACTURACION
             String seriefac = request.getParameter("seriefac");
             String codigo = request.getParameter("codigo");
             String descripcion = request.getParameter("descripcion");
             String serieBD = request.getParameter("serieBD");
             
             int error = 0;

             // COMPROBACION E INSERCION DE LA SERIE DE FACTURACION
             if(seriefac.equals("") || codigo.equals("")){
                 error = 2;
             }else{
                 SFacturacion seriefacuracion = new SFacturacion(seriefac, codigo, descripcion);
                 error = PersistenciaSFacturacion.actualizaSFacturacion(seriefacuracion, serieBD);
             }

             request.setAttribute("insertado",error);

             // REDIRECCION
             RequestDispatcher rd = request.getRequestDispatcher("SEditar?id=SFacturacion&serie="+seriefac);
             rd.forward(request, response);
            
        }else if(clase.equals("TipoIva")){
            
            // RECOJIDA DE DATOS DEL TIPO DE IVA
            float porcentaje;
            try{
                porcentaje = Float.parseFloat(request.getParameter("porcentaje"));
            }catch(Exception ex){
                porcentaje = 915;
            }
            
             String descripcion = request.getParameter("descripcion");
             String descripcionBD = request.getParameter("descripcionBD");

             int addiva = 0;

             // COMPROBACION E INSERCION DEL USUARIO
             if(porcentaje>100 && porcentaje!=915){
                addiva = 3;
             }else{
                 if(descripcion.equals("") || porcentaje==915){
                    addiva = 2;
                }else{            
                    TiposIva tipoiva = new TiposIva(descripcion, porcentaje);
                    addiva = PersistenciaTiposIva.actualizaTipoIva(tipoiva, descripcionBD);
                }
             }

             // INSERCION DEL ATRIBUTO CLIENTE PARA DESPUES COMPROBAR Y SACAR EL MENSAJE EN ADDUSUARIO.JSP
             request.setAttribute("insertado",addiva);

             // REDIRECCION
             RequestDispatcher rd = request.getRequestDispatcher("SEditar?id=TipoIva&codigo="+descripcion);
             rd.forward(request, response);
             
        }
        
        
        try {
            /* TODO output your page here
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet SGuardaEdicion</title>");  
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet SGuardaEdicion at " + request.getContextPath () + "</h1>");
            out.println("</body>");
            out.println("</html>");
             */
        } finally {            
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (SQLException ex) {
            Logger.getLogger(SGuardaEdicion.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ParseException ex) {
            Logger.getLogger(SGuardaEdicion.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (SQLException ex) {
            Logger.getLogger(SGuardaEdicion.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ParseException ex) {
            Logger.getLogger(SGuardaEdicion.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
